// Element.cpp: implementation of the Element class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Element.h"
#include "ElementGeometry.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Element::Element()
{
	m_pCurGeo = NULL;
}
Element::~Element()
{
	ElementGeometry* pGeo =NULL;
	while( !m_ListGeo.IsEmpty())
	{
		pGeo = m_ListGeo.GetHead();
		if( pGeo!=NULL )
		{
			delete pGeo;
		}
		m_ListGeo.RemoveHead();
	}

}
void Element::Attach(ElementGeometry *pElementGeo)
{
	if( m_ListGeo.Find(pElementGeo) !=NULL )
		return ;
	
	m_ListGeo.AddTail(pElementGeo);
	m_pCurGeo = pElementGeo;

}

void Element::Detatch(ElementGeometry *pElementGeo)
{
	POSITION pos;
	if( (pos=m_ListGeo.Find(pElementGeo)) == NULL )
		return ;
	m_ListGeo.RemoveAt(pos);
}

void Element::Notify(BOOL bFlag)
{
	if(m_ListGeo.IsEmpty())
		return;
	
	POSITION pos = m_ListGeo.GetHeadPosition();
	ElementGeometry* pGeo = NULL ;
	for(int i = 0; i < m_ListGeo.GetCount() ; i++)
	{
		pGeo = m_ListGeo.GetNext(pos);
		pGeo->Update(bFlag);
	}
}

ElementGeometry* Element::GetCurGeometry()
{
	return m_pCurGeo;
}

void Element::SetCurGeometry(ElementGeometry *pGeo)
{
	if( m_ListGeo.Find(pGeo) != NULL)
	{
		m_pCurGeo = pGeo;
	}
}
